#include <iostream>
#include <stdio.h>

//stat命令主要是用来显示文件或者文件系统的详细信息
//显示的这些参数,我们一一来解释一番
//File:表示文件名
//Size:表示文件的大小
//Blocks:这个文件占用的块设备的大小(块的单位以512字节:)
//IO Black:表示文件系统块默认大小是4096
//regular empty file:表示此时是个空文件
//regular file:表示此时文件已有内容
//Device:表示存放文件的设备
//Inode:表示文件的Inode标号
//Links:硬链接的数目
//Acesss:代表最近一次访问这个文件的时间
//Modify:代表文件内容的最后修改时间
//Change:代表文件属性的最后修改时间

//我们重点说说Acesss,Modify,Change
//Access:对于文件来说，当我们使用cat、more、less等命令读取文件内容
//或者使用file cp命令操作文件
//或执行可执行文件时，Access时间会被更新，空文件也不例外
//对于目录来说，只进入目录不会更新其Access时间
//但是通过ls查看目录内容时，Access时间就会更新
//上面的这些特点,在较老的linux内核里面才会有体现
//较新的linux内核中,Access时间不会立即更新,而是有一定的时间间隔
//OS才会自动进行时间更新
//因为访问文件的操作太多了,频繁的更新Access
//会导致与磁盘过度频繁交互,导致系统效率降低

//Modify:只要文件的内容被修改了，不仅Modify所代表的时间会随之修改
//Access也会随之修改(因为你修改内容必然会访问这个文件)
//Change所代表的时间也一定会修改,因为内容被修改也算属性被修改的一种

//Change:修改文件的属性并不会去访问这个文件
//也不会修改文件的文本内容
//因此属性修改只会改变Change所代表的时间

//touch 已经存在的文件
//会强制刷新Access,Modify,Change的时间

//我们来说说makefile是如何判断,当前文件是最新的,不让gcc进行重新编译?
//当我们写好了源文件,那么它的Change时间已经确定了
//此时我们执行make,那么生成的可执行程序的Change的时间也已经确定了
//这个时候源文件的Change时间肯定比可执行程序的Change时间早
//这个时候再次执行make,就不会重新编译,说明这个源文件,还是原来的那个
//如果我们对源文件进行了修改
//那么新的Change时间肯定比已经生成的可执行程序的Change时间晚
//那么再次执行make,就会重新编译
//makefile与gcc会根据实践问题,来判断源文件和可执行程序谁更新
//从而指导系统哪些源文件需要被重新编译

int main()
{
    printf("hello world\n");
    return 0;
}
